//----------------------------------Include-------------------------------------
#include "mcu.h"
//------------------------------------------------------------------------------

//3 个看门狗定时器，其中 2 个位于系统电源域称为 WDG0~1 。
//WDG0~1 的时钟为 CLK_TOP_AHB，计数器外部时钟来自 CLK_32K。
//1 个位于电源管理域，称为 PWDG ， PWDG 可以在系统电源域掉电时保持工作。
//PWDG 的时钟为 CLK_24M ，计数器外部时钟为 CLK_32K。
//PWDG 支持从电源管理域 IO 上输出复位信号。

//WDG 有三个时钟输入，分别是总线配置时钟，外部工作时钟 1 和外部工作时钟 2。
//总线工作时钟用来配置 WDG 的寄存器和喂狗操作，
//外部工作时钟 1 和外部工作时钟 2 作为 EWDG 的工作时钟，可以由寄存器配置来选择。

//超时时间计算公式
//Ttimeout = Tclk_period * (1 << counter_interval) * counter_rst_value

//--------------------------------Public Func-----------------------------------
void mcu_init_wdg0(void)
{
  ewdg_config_t     cfg;
  ewdg_get_default_config(HPM_EWDG0, &cfg);

  cfg.int_rst_config.enable_timeout_reset  = true;
  
  cfg.ctrl_config.cnt_clk_sel          = ewdg_cnt_clk_src_ext_osc_clk;
  cfg.ctrl_config.use_lowlevel_timeout = false;
  cfg.ctrl_config.timeout_reset_us     = 1000UL * 2000;   //second

  cfg.enable_watchdog  = true;      //这里要使能，不能这里 false，后续才调用 ewdg_enable，将不起作用
  cfg.cnt_src_freq     = 32768UL;
  ewdg_init(HPM_EWDG0, &cfg);
}

void mcu_wdg0_feed(void)
{
  ewdg_refresh(HPM_EWDG0);
}
//------------------------------------EOF---------------------------------------



